package com.example.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.common.Re;
import com.example.entity.Employee;
import com.example.mapper.EmployeeMapper;
import com.example.service.IEmployeeService;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;


/**
 * <p>
 * 员工信息 服务实现类
 * </p>
 *
 * @author czx
 * @since 2022-04-28
 */
@Service
public class EmployeeServiceImpl extends ServiceImpl<EmployeeMapper, Employee> implements IEmployeeService {

    @Override
    public boolean save(Employee employee) {
        String password = DigestUtils.md5DigestAsHex("123456".getBytes());
        employee.setPassword(password);
        return baseMapper.insert(employee) > 0;
    }

    /**
     * 员工登录
     *
     * @param employee 员工登录
     * @return 登录是否成功
     */
    @Override
    public Re<Employee> login(Employee employee) {
        // 1、将页面提交的密码password进行md5加密处理
        String password = employee.getPassword();
        password = DigestUtils.md5DigestAsHex(password.getBytes());

        // 2、根据页面提交的用户名username查询数据库
        LambdaQueryWrapper<Employee> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(Employee::getUsername, employee.getUsername());
        Employee emp = baseMapper.selectOne(wrapper);

        // 3、没有数据==>查无此人
        if (emp == null) {
            return Re.error("账号错误");
        }

        // 4、 密码是否匹配
        if (!emp.getPassword().equals(password)) {
            return Re.error("密码错误");
        }

        // 5、账号是否禁用
        if (emp.getStatus() == 0) {
            return Re.error("账号已禁用");
        }

        // 6、登录成功
        emp.setPassword(null);
        return Re.success(emp);
    }

    /**
     * 分页查询员工信息
     *
     * @param page     页数
     * @param pageSize 页大小
     * @param name     查询的员工名
     * @return 查询结果
     */
    @Override
    public Page<Employee> page(int page, int pageSize, String name) {
        // 构造分页构造器
        Page<Employee> pageInfo = new Page<>(page, pageSize);
        //构造条件构造器
        LambdaQueryWrapper<Employee> wrapper = new LambdaQueryWrapper<>();
        //添加过滤条件
        wrapper.like(StringUtils.isNotEmpty(name), Employee::getName, name);
        // 添加排序条件
        wrapper.orderByDesc(Employee::getCreateTime);
        //执行查询
        return baseMapper.selectPage(pageInfo, wrapper);
    }


}
